package com.smart.community.device.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.smart.community.commons.enums.SystemStatusEnum;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * 设备实体类
 * @author Wu.Liang
 * @since 2024-12-21
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("sc_device")
public class Device implements Serializable {
    
    private static final long serialVersionUID = 1L;
    
    /**
     * 设备ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    
    /**
     * 设备名称
     */
    @TableField("device_name")
    private String deviceName;
    
    /**
     * 设备编码
     */
    @TableField("device_code")
    private String deviceCode;
    
    /**
     * 设备类型：1-门禁，2-监控，3-电梯，4-消防，5-照明，6-其他
     */
    @TableField("device_type")
    private Integer deviceType;
    
    /**
     * 设备状态：0-离线，1-在线，2-故障，3-维护
     */
    @TableField("device_status")
    private Integer deviceStatus;
    
    /**
     * 设备IP地址
     */
    @TableField("ip_address")
    private String ipAddress;
    
    /**
     * 设备端口
     */
    @TableField("port")
    private Integer port;
    
    /**
     * 设备厂商
     */
    @TableField("manufacturer")
    private String manufacturer;
    
    /**
     * 设备型号
     */
    @TableField("model")
    private String model;
    
    /**
     * 设备位置描述
     */
    @TableField("location")
    private String location;
    
    /**
     * 所属社区ID
     */
    @TableField("community_id")
    private Long communityId;
    
    /**
     * 所属楼栋ID（可选）
     */
    @TableField("building_id")
    private Long buildingId;
    
    /**
     * 所属单元ID（可选）
     */
    @TableField("unit_id")
    private Long unitId;
    
    /**
     * 安装时间
     */
    @TableField("install_time")
    private LocalDateTime installTime;
    
    /**
     * 最后心跳时间
     */
    @TableField("last_heartbeat")
    private LocalDateTime lastHeartbeat;
    
    /**
     * 备注信息
     */
    @TableField("remark")
    private String remark;
    
    /**
     * 创建人ID
     */
    @TableField("create_by")
    private Long createBy;
    
    /**
     * 创建时间
     */
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    
    /**
     * 更新人ID
     */
    @TableField("update_by")
    private Long updateBy;
    
    /**
     * 更新时间
     */
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    
    /**
     * 逻辑删除：0-未删除，1-已删除
     */
    @TableLogic
    @TableField("deleted")
    @JsonIgnore
    private Integer deleted;
    
    /**
     * 获取设备类型文本
     */
    public String getTypeDesc() {
        switch (deviceType) {
            case 1: return "门禁";
            case 2: return "监控";
            case 3: return "电梯";
            case 4: return "消防";
            case 5: return "照明";
            case 6: return "其他";
            default: return "未知";
        }
    }
    
    /**
     * 获取设备状态文本
     */
    public String getStatusDesc() {
        switch (deviceStatus) {
            case 0: return "离线";
            case 1: return "在线";
            case 2: return "故障";
            case 3: return "维护";
            default: return "未知";
        }
    }
}
